#include <bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn = 1e5 + 5;
int arr[maxn];
int prefix[maxn];
int cnt[maxn];
void solve(){
	int n;
	cin >> n;
	for (int i=1;i<=n;i++) {
		cin >> arr[i];
	}
	
	for (int i=1;i<=n;i++) {
		prefix[i] = prefix[i-1] ^ arr[i];
	} 
	cnt[0]=1;
	int ans = n*(n+1)/2;
	
	for (int i=1;i<=n;i++) {
		// 内层循环不是 从 0 - r, 而是, 直接在 r 上面, 找出 前面已经出现过的 j*j^prefix[i] 的个数
		// 这样内层循环的次数会减少很多 总的时间复杂度是  n*根号n
		for (int j=0;j*j <= (n<<1);j++) { 
			ans -= cnt[j*j^prefix[i]];
		}
		cnt[prefix[i]]++; // cnt[x] 表示前面已经有几个 连续数组的值 xor 结果是 x
	}
	cout << ans << '\n';
}


signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int t;
	t=1;
	while(t--){
		solve();
	}
	return 0;
}
